<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

    <script>

        function code(n) {

            // 默认产生4位验证码
            n = n || 4;

            var numArr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];

            var smallArr = ['a', 'b', 'c', 'd', 'e', 'f'];

            var bigArr = ['A', 'B', 'C', 'D', 'E', 'F'];

            var allArr = smallArr.concat(numArr, bigArr);

            var res = [];  // 验证码存入数组

            // 必须包含小写大写和数字

            res.push(numArr[rand(0 , numArr.length)]);  // 娶一个数字

            res.push(smallArr[rand(0 , smallArr.length)]) ; // 娶一个小写

            res.push(bigArr[rand(0 , bigArr.length)]) ;  // 娶一个大写

            // 剩下的在所有的值中取
            for(var i = 0 ; i < n - 3 ; i++) {
                res.push(allArr[rand(0 , allArr.length)]);
            }

            console.log(res);   // 数组

            // 得到的验证码前三位是固定的


            // // 洗牌
            // //    拿第一个值和任意一个位置上的值进行交换
            // var x = rand(0 , n) ;   // 在这几张牌中随机找一个位置
            // var t = res[0] ;
            // res[0] = res[x] ;
            // res[x] = t ;

            // //    拿第二个值与任意一个位置上的值进行交换
            // var x = rand(0 , n) ;   // 在这几张牌中随机找一个位置
            // var t = res[1] ;
            // res[1] = res[x] ;
            // res[x] = t ;
            // //    拿第3个值和任意一个位置上的值进行交换
            // var x = rand(0 , n) ;   // 在这几张牌中随机找一个位置
            // var t = res[2] ;
            // res[2] = res[x] ;
            // res[x] = t ;
            // //    拿第4个值与任意一个位置上的值进行交换
            // //    拿第5个值和任意一个位置上的值进行交换
            // //    拿第6个值与任意一个位置上的值进行交换

            for(var i = 0 ; i < res.length ; i++) {
                var x = rand(0 , n) ;   // 在这几张牌中随机找一个位置
                var t = res[i] ;
                res[i] = res[x] ;
                res[x] = t ;
            }

            console.log(res) ;

            // 把数组转成字符串
            return res.join('') ;
            
        }


        document.write(code(6)) ;


        function rand(min , max) {
            return parseInt(Math.random() * (max - min)) + min ;
        } 

    </script>

</body>

</html>